Ich denke das bringt mich vom Verständnis weiter. Ich glaube es ist aber noch nicht die finale Lösung. Ich bin noch relativ neu bei VBA und habe in der Vergangenheit meistens mit MATLAB gearbeitet, daher ist mir die Verwendung von manchen Dingen noch relativ unklar.
Ich habe nun deine Codezeile etwas angepasst und bei mir integriert.
Function IsDocumentOpen(ByVal DokutName As String) As Boolean
If Strings.Right(DokutName, 5) <> ".docx" Then
DokutName = DokutName & ".docx"
End If
Dim wdDoc As Microsoft.Office.Interop.Word.Document = DirectCast(GetObject(DokutName), Microsoft.Office.Interop.Word.Document)
IsDocumentOpen = False
For Each doc In Documents
If (StrComp(doc.Name, DokutName, vbTextCompare) = 0) Then
IsDocumentOpen = True
Exit For
End If
Next doc
End Function
Inwiefern muss man denn hier mit der Variable wdDoc arbeiten? Ich verstehe deinen Post so, dass damit die Instanz wdDoc erstellt wird und sich anschließend in der Liste Documents befindet. Entsprechend könnte man beim Durchlaufen der Schleife die Datei finden. wdDoc selbst muss also anschließend nicht mehr im Code stehen.
Bei der Fehlermeldung hatte ich mich beim Erstellen des Threads etwas unpräzise ausgedrückt. Der Fehler wird mir nicht erst während der Laufzeit angezeigt (Wo der Compiler dann ja merken müsste, dass die Instanz fehlt), sondern bereits vor dem Ausführen des Codes. Insofern können deine Ausführungen das Problem glaube ich nicht beheben, weil je nach Programmablauf die Instanz erstellt wird oder eben nicht. Bei mir ist dann wahrscheinlich etwas anderes noch falsch.
|